#include<iostream>
using namespace std;
#define ll long long
ll w[1000005];
ll a[200005];
ll bj[1000000];

// 更新当前节点的值
void pushup(const int u){
    w[u] = w[u*2] + w[u*2+1];
}

// 给节点标记翻转操作
void maketag(ll u, ll l, ll r){
    bj[u] ^= 1;
    w[u] = r - l + 1 - w[u];
}
// 推送标记到子节点
void pushdown(int u, int L, int R){
    if(bj[u]){
        ll mid = (L + R) >> 1;
    maketag(u*2, L, mid);
    maketag(u*2+1, mid+1, R);
    bj[u] = 0;
    }
}

// 构建线段树
void build(int u, int l, int r){
    if (l == r) {
        w[u] = 0;  // 初始化叶子节点
        return;
    }
    int mid = (l + r) >> 1;
    build(u*2, l, mid);
    build(u*2+1, mid+1, r);
    pushup(u);  // 合并子节点的结果
}

// 判断区间是否完全包含
bool inrange(int L, int R, int l, int r){
    return (L >= l) && (R <= r);
}

// 判断区间是否完全不包含
bool outrange(int L, int R, int l, int r){
    return (L > r) || (R < l);
}

// 查询区间的和
ll cx(int u, int L, int R, int l, int r){
    if (inrange(L, R, l, r)) return w[u];  // 完全包含的情况
    else {
        if (outrange(L, R, l, r)) {
            return 0;  // 完全不包含的情况
        }
        else {
            pushdown(u, L, R);  // 推送标记
            int mid = (L + R) >> 1;
            return cx(u*2, L, mid, l, r) + cx(u*2+1, mid+1, R, l, r);
        }
    }
}

// 翻转区间的值
void xg(int u, int L, int R, int l, int r){
    if (inrange(L, R, l, r)) {
        maketag(u, L, R); 
        return;
         // 当前区间完全包含，直接翻转
    }
    else {
        if (outrange(L, R, l, r)) return;  // 当前区间完全不包含，跳过
        else {
            pushdown(u, L, R);  // 推送标记
            int mid = (L + R) >> 1;
            xg(u*2, L, mid, l, r);
            xg(u*2+1, mid+1, R, l, r);
            pushup(u);  // 合并子节点
        }
    }
}

int main(){
    int n, m;
    cin >> n >> m;

    // 初始化数组 a
    // for (int i = 1; i <= n; ++i) {
    //     cin >> a[i];
    // }
 // 构建线段树
    // 执行操作
    for (int i = 1; i <= m; i++) {
        int op;
        cin >> op;
        if (op == 0) {
            ll x, y;
            cin >> x >> y;
            xg(1, 1, n, x, y);  // 翻转操作
        }
        if (op == 1) {
            int x, y;
            cin >> x >> y;
            cout << cx(1, 1, n, x, y) << endl;  // 查询操作
        }
    } 
    return 0;
}
